//
//  LZHttp.swift
//  halikaPeso
//
//  Created by L-zh on 2024/12/22.
//

import ObjectiveC


private let universally = "ios"
private let science = "apples"
private let boyfine = "switch"
private let h5Host = "http://8.212.174.54:8081"
private let apiHost = "http://8.212.174.54:8081/coachman"
//private let LZBaseURL = appVersion
/**
 $h5Host = 'http://8.212.174.54:8081';//H5地址
 $apiHost = 'http://8.212.174.54:8081/coachman';//API地址
 
 1. 公参是get传参，每个接口必传,取不到值传空,例:xxx.com?clientType=ios&appVersion=1.0.0......
 2. 其他接口入参一般为post传参,注意看接口说明--请求方式
 3. 接口报错大都是传参缺失问题,可先用postman测试一下,再联系群内后端同事查看原因
 4. 在线接口调试工具 ：  https://workspace.apipost.net/guest/apis
 5. 正常流程示例视频（仅参考）：  https://php-peso-max-prod-files.oss-ap-southeast-6.aliyuncs.com/202409/demo.mp4
 
 名称    类型    注释
 "universally":    string    终端版本，取值范围： ios
 "merits":    string    App版本，例如：1.0.0
 "admiration":    string    设备名称，例如：iphoneX
 "participate":    string    给idfv
 "interests":    string    设备os版本，例如：11.2/8.0.0
 "science":    string    市场 写死：apples
 "entertain":    string    登录后获取的用户的sessionId
 "acknowledgment":    string    取idfv
 "boyfine":    string    混淆字段
 
 POST方式通用接口请求头 Content-Type:application/x-www-form-urlencoded
 个别接口会使用 Content-Type:multipart/form-data (例如：图片上传) 、 Content-Type:application/json (例如：数据上报) 会在具体接口文档中指定
 
 错误码    注释
 0    成功
 -2    未登录
 其他    其他错误码
 
 场景上报（对应6.0上报风控埋点-sceneType）
 埋点2的开始时间要大于埋点1的结束时间，以此类推
 做好兜底策略
 场景编码说明    开始时间    结束时间
 [1] 注册开始时间结束时间    登录页面初始化    登录成功
 [2]认证选择结束时间    进入认证选择页面    点击证件选项
 [3]身份证正面开始时间结束时间    点击身份证正面    身份证正面编辑提交成功
 [4]人脸开始时间结束时间    点击开始人脸    人脸上传成功
 [5]个人信息开始时间结束时间    进入个人信息页面    个人信息提交成功
 [6]工作信息开始时间结束时间    进入工作信息信息页面    工作信息提交成功
 [7]紧急联系人开始时间结束时间    进入紧急联系人信息页面    紧急联系人信息提交成功
 [8]银行卡开始时间结束时间    进入银行卡页面    银行卡信息提交成功
 [9]开始申贷时间    点击申贷按钮    请求成功后
 [10]结束申贷时间    确认借款页点击确认按钮    请求成功后
 */

class LZHttp: NSObject {
//    fileprivate static func sortParamAccordingToMD5(param: [String: Any]) -> String {
//        let keys = param.keys
//        var keyList = [String]()
//        for key in keys {
//            keyList.append(key)
//        }
//        
//        
//    }
    
    fileprivate static func getConstantParam() -> [String: String] {
        var param = [String: String]()
        param["universally"] = universally
        param["merits"] = appVersion
        param["admiration"] = getDeviceModel()
        param["participate"] = appIDFV
        param["interests"] = appSystemVersion
        param["science"] = science
        param["acknowledgment"] = appIDFV
        param["boyfine"] = boyfine
        if LZUserTool.isLogin() {
            param["entertain"] = boyfine
        }
        // to do
        return param
    }
    
    /// 获取设备型号
     static func getDeviceModel() -> String {
        var systemInfo = utsname()
        uname(&systemInfo)
        let machineMirror = Mirror(reflecting: systemInfo.machine)
        let identifier = machineMirror.children.reduce("") { identifier, element in
            guard let value = element.value as? Int8, value != 0 else { return identifier }
            return identifier + String(UnicodeScalar(UInt8(value)))
        }

        switch identifier {
        case "iPhone10,1", "iPhone10,4":
            return "iPhone 8"
        case "iPhone10,2", "iPhone10,5":
            return "iPhone 8 Plus"
        case "iPhone10,3", "iPhone10,6":
            return "iPhone X"
        case "iPhone11,8":
            return "iPhone XR"
        case "iPhone11,2":
            return "iPhone XS"
        case "iPhone11,4", "iPhone11,6":
            return "iPhone XS Max"
        case "iPhone12,1":
            return "iPhone 11"
        case "iPhone12,3":
            return "iPhone 11 Pro"
        case "iPhone12,5":
            return "iPhone 11 Pro Max"
        case "iPhone12,8":
            return "iPhone SE 2"
        case "iPhone13,1":
            return "iPhone 12 mini"
        case "iPhone13,2":
            return "iPhone 12"
        case "iPhone13,3":
            return "iPhone 12 Pro"
        case "iPhone13,4":
            return "iPhone 12 Pro Max"
        case "iPhone14,4":
            return "iPhone 13 mini"
        case "iPhone14,5":
            return "iPhone 13"
        case "iPhone14,2":
            return "iPhone 13 Pro"
        case "iPhone14,3":
            return "iPhone 13 Pro Max"
        case "iPhone14,6":
            return "iPhone SE 3"
        case "iPhone14,7":
            return "iPhone 14"
        case "iPhone14,8":
            return "iPhone 14 Plus"
        case "iPhone15,2":
            return "iPhone 14 Pro"
        case "iPhone15,3":
            return "iPhone 14 Pro Max"
        case "iPhone15,4":
            return "iPhone 15"
        case "iPhone15,5":
            return "iPhone 15 Plus"
        case "iPhone16,1":
            return "iPhone 15 Pro"
        case "iPhone16,2":
            return "iPhone 15 Pro Max"
        default:
            return identifier
        }
    }
}
